/*
 *    Copyright 2009-2022 the original author or authors.
 *
 *    Licensed under the Apache License, Version 2.0 (the "License");
 *    you may not use this file except in compliance with the License.
 *    You may obtain a copy of the License at
 *
 *       https://www.apache.org/licenses/LICENSE-2.0
 *
 *    Unless required by applicable law or agreed to in writing, software
 *    distributed under the License is distributed on an "AS IS" BASIS,
 *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *    See the License for the specific language governing permissions and
 *    limitations under the License.
 */
package org.apache.ibatis.mapping;

/**
 * @author Clinton Begin
 */
public enum StatementType {

  /**
   * STATEMENT
   * 对应于 Statement 类，它是最基本的 SQL 语句执行对象。
   * 使用 Statement 执行 SQL 语句时，SQL 语句是静态的，不能包含参数。
   * 当执行简单的、不带参数的 SQL 语句时，可以使用 Statement。
   */
  STATEMENT,

  /**
   * PREPARED（xml配置文件如果不填写就是默认）
   * 对应于 PreparedStatement 类，它是 Statement 的子类。
   * 使用 PreparedStatement 执行 SQL 语句时，可以预编译 SQL 语句，并通过占位符（?）来绑定参数。
   * PreparedStatement 提高了 SQL 语句的执行效率，因为它允许预编译的 SQL 语句被重用，并且可以防止 SQL 注入攻击。
   * 当执行带有参数的 SQL 语句时，通常使用 PreparedStatement。
   */
  PREPARED,

  /**
   * CALLABLE
   * 对应于 CallableStatement 类，它也是 PreparedStatement 的子类。
   * 使用 CallableStatement 执行 SQL 语句时，主要用于执行存储过程（Stored Procedures）。
   * CallableStatement 支持 IN、OUT 和 INOUT 参数，这使得它可以与数据库中的存储过程进行交互。
   * 当需要调用数据库中的存储过程时，使用 CallableStatement。
   */
  CALLABLE

}
